package br.com.pentagrama.server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

	public static void main(String args[]) throws Exception
    {
       DatagramSocket serverSocket = new DatagramSocket(9876);
          byte[] receiveData = new byte[1024];
          byte[] sendData = new byte[1024];
          while(true)
             {
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                serverSocket.receive(receivePacket);
                String sentence = new String( receivePacket.getData());
                System.out.println("RECEIVED: " + sentence);
                InetAddress IPAddress = receivePacket.getAddress();
                int port = receivePacket.getPort();
                String capitalizedSentence = sentence.toUpperCase();
                sendData = capitalizedSentence.getBytes();
                DatagramPacket sendPacket =
                new DatagramPacket(sendData, sendData.length, IPAddress, port);
                serverSocket.send(sendPacket);
             }
    }
	
	public static void main1(String[] args) {
		// Declaro o ServerSocket
		ServerSocket serv = null;

		// Declaro o Socket de comunicação
		Socket s = null;

		// Declaro o leitor para a entrada de dados
		BufferedReader entrada = null;

		try {

			// Cria o ServerSocket na porta 7000 se estiver disponível
			serv = new ServerSocket(7000);

			while(true) {
				// Aguarda uma conexão na porta especificada e cria retorna o socket
				// que irá comunicar com o cliente
				s = serv.accept();
	
				// Cria um BufferedReader para o canal da stream de entrada de dados
				// do socket s
				entrada = new BufferedReader(new InputStreamReader(
						s.getInputStream()));
	
				String linha = null;
				while((linha = entrada.readLine()) != null) {
					//Aguarda por algum dado e imprime a linha recebida quando recebe
					System.out.println("Linha lida:" + linha);
				}
	
				// trata possíveis excessões de input/output. Note que as excessões
				// são as mesmas utilizadas para as classes de java.io
			}
		} catch (IOException e) {

			// Imprime uma notificação na saída padrão caso haja algo errado.
			System.out
					.println("Algum problema ocorreu para criar ou receber o socket.");

		} finally {

			try {

				// Encerro o socket de comunicação
				s.close();

				// Encerro o ServerSocket
				serv.close();

			} catch (IOException e) {
			}
		}

	}

}
